/**
 * Por Joshua
 * Descripcion o proposito
 * @class namespace
 *
 * @extends clasePadre
 * @autor Ing. Josue Hernandez Gomez<br>
 *        joshua@extjs.mx<br>
 *        http://www.joshua.com.mx
 * @fecha 12/9/12 11:35 AM. Mexico DF
 */


enlace.envios.PanelEnvios= Ext.extend(Ext.Panel, {

    layout:'border',
    border: false,
    
    initComponent: function (){
        this.grid= /*new Ext.Panel({
            region:'center',
            html:'Hola mundo'
        });*/new enlace.envios.GridEnvios({
            region:'center',
            listeners:{
                scope: this,
                beforeload: function (){
                    this.btnEditar.disable();
                    this.btnCancelar.disable();
                },
                rowclick: function (){
                    this.btnEditar.enable();
                    this.btnCancelar.enable();
                },
                rowdblclick: function(grid, rowIdx){
                    var record = grid.getSeleccionado();  // Get the Record

                    if(record.json.estatus=="Editame")
                        return ;

                    var _idenvio = record.json.id || record.json.id_envio;
                    var _prefijo = record.get('prefijo');


                    //validar que no se haya agregaod ya el tab de ese envio
                    var g=joshua.envios.tabPanel.items;
                        for(var f=1/*El primero lo omito porque siempre es "Lista de envios"*/; f<g.length; f++)
                        {//para cada uno de los ids de los tabs
                                var it=Ext.getCmp(g.keys[f]);
                                if( it.title == _prefijo+"-"+_idenvio){
                                    Ext.getCmp('tabEnviosMain').setActiveTab(g.keys[f]);
                                    return ;
                                }
                        }

                    //no se encontro el tab (no se ha agregado)... agregarlo

                    var panel= new joshua.envios.TabDetalle({
                        prefijo:_prefijo,
                        id_envio:_idenvio
                    });

                    joshua.envios.tabPanel.add(panel);
                    joshua.envios.tabPanel.setActiveTab(panel.id);
                }
            }
        });
        
        Ext.apply(this,{
            title:'Lista de envios',
            iconCls:'grid',
            tbar:[{
                    text:'<b>Capturar nuevo</b>',
                    iconCls:'envio_nuevo',
                    tooltip:'Presione para agregar un nuevo envio',
                    scope:this,
                    handler: this.mostrarForm.createDelegate(this,['insertar'], false)

                },{
                    text:'<b>Editar</b>',
                    iconCls:'envio_editar',
                    hidden:joshua.hidden,
                    disabled: true,
                    id:'btnedtar'+ this.id,
                    tooltip:'Presione para editar un envio',
                    scope: this,
                    handler: function (){
                        var seleccionado= this.grid.getSeleccionado();
                        this.mostrarForm('editar',seleccionado.data.id);
                    }
                },{
                    text:'<b>Cancelar</b>',
                    iconCls:'envio_borrar',
                    hidden:joshua.hidden,
                    scope: this,
                    id:'btncancelar'+ this.id,
                    disabled: true,
                    tooltip:'Presione para cancelar un envio',
                    handler: function (){
                        var seleccionado= this.grid.getSeleccionado();
                        this.cancelar(seleccionado.data.id_envio);
                    }
                },'-',{
                        text: 'Imprimir',
                        iconCls:'imprimir',
                        hidden:joshua.hidden,
                        tooltip:'Presione para imprimir el reporte de usuarios',
                        //cls: 'x-btn-text-icon details',
                        scope: this,
                        handler: function (){
                            this.grid.imprimirGrid();
                        }
                    },{
                        text: 'Exportar',
                        hidden:joshua.hidden,
                        iconCls:'page_excel',
                        tooltip:'Presione para generar un archivo para excel',
                        //cls: 'x-btn-text-icon details',
                        scope: this,
                        handler: function (){

                            var myMask = new Ext.LoadMask(this.grid.getEl() , {
                                msg:"Creando archivos, por favor espere..."
                            });
                            myMask.show();

                            Ext.Ajax.request({
                                url:joshua.url,
                                params: {
                                    cmd:'exportarexls',
                                    className:'Envio',
                                    condiciones:this.grid.store.baseParams.condiciones
                                },
                                success:function (){
                                    Ext.DomHelper.append(Ext.getBody() , {
                                        tag: 'iframe',
                                        frameBorder: 0,
                                        width:0,
                                        height:0,
                                        fitToFrame:false,
                                        src: "http://www.enlaceinternacional.com/enlace/Servicios/xls/reportes.zip"
                                    });
                                    myMask.hide();
                                }
                            });
                        }
                    },'->',{
                    text:'<b>Agregar Editame</b>',
                    iconCls:'boleto_nuevo',
                    scope: this,
                    tooltip:'Presione para agregar un nuevo envio en blanco',
                    handler: function(){
                        var r=this;
                        r.disable();
                        Ext.Ajax.request({
                            url:joshua.url,
                            params:{
                                cmd:'insertarEditame',
                                className:'Envio'
                            },
                            scope: this,
                            success:function(){
                                r.enable();
                                this.grid.listar("{}");
                                joshua.funciones.alert('save','Envio generado!',"El envio Editame fue generado ");
                            }
                        });
                    }
                }],

            items:[{
                title: 'Reportes y filtros',
                iconCls:'bitacora',
                collapsible: true,
                frame:false,
                border: false,
                collapsed:false,
                region:'west',
                width:360,
                layout:'accordion',
                items:[this.crearFiltro(),{
                    title: 'Reportes',
                    hidden:joshua.hidden,
                    xtype: 'treepanel',
                    width: 200,
                    autoScroll: true,
                    iconCls:'text_list',
                    frame:true,
                    loader: new Ext.tree.TreeLoader(),
                    root: new Ext.tree.AsyncTreeNode({
                        expanded: true,
                        children: [{
                            text: 'En Oaxaca',
                            iconCls:'sucursal',
                            leaf: true
                        }, {
                            text: 'En transito',
                            iconCls:'avionicono1',
                            leaf: true
                        }, {
                            text: 'En los angeles',
                            iconCls:'sucursal',
                            leaf: true
                        },{
                            text: 'Entregados',
                            iconCls:'entregadomeddal',
                            leaf: true
                        },{
                            text: 'A domicilio',
                            iconCls:'corrida',
                            leaf: true
                        },{
                            text: 'En conflicto',
                            iconCls:'cancel',
                            leaf: true
                        }]
                    }),
                    rootVisible: false,
                    listeners: {
                        scope: this,
                        click: function(n) {
                            this.grid.listarReporte(n.attributes.text);
                        }
                    }
                }
                ]
            },this.grid]
        });

        enlace.envios.PanelEnvios.superclass.initComponent.apply(this,arguments);

        this.on({
            scope: this,
            render: function (){
                this.btnEditar= Ext.getCmp('btnedtar'+ this.id);
                this.btnCancelar= Ext.getCmp('btncancelar'+ this.id);

            }
        });
    },


    _crearFormVentana: function (_cmd){
        this.windowForm = new Extmx.WindowForm({
            width: 900,
            iconAdd:"envio_nuevo",
            iconMod:"envio_editar",
            titleAdd:"Agregar env&iacute;o",
            titleMod:"Editar env&iacute;o",
            closeAction:'close',
            height: 560,
            modal: true,
            manager: Ext.managerEnlace,
            cmd: _cmd,
            form:new joshua.envios.form({
                listeners:{
                    scope: this,
                    agregado: function (asd,respuesta){
                        this.windowForm.close();
                        if(Ext.isEmpty(respuesta.editado)){
                            var panel= new joshua.envios.TabDetalle({
                                prefijo:respuesta.prefijo,
                                id_envio:respuesta.id
                            });
                            if(!Ext.getCmp('tabEnviosMain').get(panel.id))
                                Ext.getCmp('tabEnviosMain').add(panel);
                            Ext.getCmp('tabEnviosMain').setActiveTab(panel.id);
                        }
                        else
                            this.grid.listar("{}");
                    }
                }
            })
        });
    },


    mostrarForm: function (_cmd,id_envio){
        //console.info(_cmd);
        //console.info(id_envio);
        this._crearFormVentana(_cmd);

        if(_cmd!="insertar"){
        //si es editar
                this.windowForm.form.cmd="editar";
                this.windowForm.on({
                    scope: this,
                    show: function (ss){
                        ss.form.cargar(id_envio);
                    }
                });
                this.windowForm.form.idActualizar=id_envio;
                this.windowForm.setTitle("Editar envio "+id_envio,'envio_editar');

        }

        this.windowForm.show();
    },

    cancelar: function (seleccionado){
        if(seleccionado!=undefined && seleccionado){
            Ext.MessageBox.confirm('Confirmar','Esta seguro que desea cancelar el envio seleccionado',
                function (btn){
                    if(btn=='yes')
                        Ext.Ajax.request({
                            url:joshua.url,
                            params: {
                                txtId:seleccionado,
                                cmd:'eliminar',
                                className:'Envio'
                            },
                            scope: this,
                            success: function (){
                                this.grid.listar("{}");
                            }
                        });
                },this);
        }
        else
            joshua.funciones.alert('aviso','Aviso!',"Por favor selecccione un envio para cancelar");
    },


    crearFiltro:function (){

        var btones= [{
                text:'<b>Buscar Envio</b>',
                iconCls:'buscar',
                tooltip:'Presione para buscar el envio con los parametros rellenados',
                scope:this,
                handler:function (){
                    this.filtro();
                }
            },'-',
            {
                text:'<b>Limpiar Filtro</b>',
                iconCls:'refrescar',
                scope: this,
                tooltip:'Presione para reiniciar la busqueda',
                handler: function (){
                    this.limpiarFiltro();
                }
            },'-'];

        return {
            title: 'Busqueda de envios',
            border: false,
            autoScroll:true,
            frame:true,
            iconCls:'buscar',
            defaults:{
                xtype:'fieldset',
                width:320,
                labelWidth:90,
                defaultType: 'textfield',
                defaults: {
                    width: 190
                }
            },
            tbar:btones,
            bbar:btones,
            items:[{
                title: 'Informaci&#243n general',
                iconCls:'envio',
                items: [{
                    fieldLabel: 'Guia',
                    id: 'id_filtro_guia',
                    listeners:{
                        scope: this,
                        specialkey:function(field,e){if(e.getKey()==e.ENTER)this.filtroId();}
                    }
                },{
                    fieldLabel: 'Remitente',
                    xtype:'comboClientes',
                    emptyText:'Remitente...',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    },
                    id: 'txt_remitente_filtro'
                },{
                    fieldLabel: 'Destinatario',
                    xtype:'comboClientes',
                    emptyText:'Destinatario...',
                    listeners: {
                       scope: this,
                        select: this.filtro
                    },
                    id: 'txt_destinatario_filtro'
                },{
                    xtype: 'combo',
                    fieldLabel: 'Tipo servicio',
                    id: 'txt_filtro_tservicio',
                    store: [['Por cobrar', 'Por cobrar'], ['Pagado', 'Pagado']],
                    emptyText: 'Pagado? Por Cobrar?...',
                    typeAhead: true,
                    triggerAction: 'all',
                    selectOnFocus: true,
                    allowBlank: true,
                    editable: false,
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                },{
                    xtype: 'combo',
                    disabled:joshua.hidden,
                    emptyText: 'Entregado? En transito?...',
                    typeAhead: true,
                    triggerAction: 'all',
                    selectOnFocus: true,
                    editable: false,
                    store:[
                        ['Todos', 'Todos'],
                        ['Listo para embarque', 'Listo para embarque'],
                        ['En transito', 'En transito'],
                        ['Listo para entregar', 'Listo para entregar'],
                        ['En proceso de entrega', 'En proceso de entrega'],
                        ['Conflicto', 'Conflicto'],
                        ['Entregado', 'Entregado'],
                        ['Decomisado', 'Decomisado'],
                        ['No reclamado', 'No reclamado']
                    ],
                    fieldLabel: 'Estatus',
                    value:'Todos',
                    allowBlank: true,
                    id: 'txt_filtro_estatusd',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                }]
            },{
                title: 'Informaci&#243n de recepcion',
                iconCls:'house',
                hidden:joshua.hidden,
                items: [new joshua.combos.SucCombox({
                    fieldLabel: 'Receptora',
                    id:'comboSucDestinoFiltro',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                }),{
                    fieldLabel: 'Usuario',
                    name: 'txt_usuario'
                },{
                    fieldLabel: 'Fecha inicio',
                    xtype:'datefield',
                    format:'Y-m-d',
                    id:'txt_fecha_inicio_filtro',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                },{
                    fieldLabel: 'Fecha fin',
                    xtype:'datefield',
                    format:'Y-m-d',
                    id:'txt_fecha_fin_filtro',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                }
                ]
            },{
                title: 'Enviados a domicilio',
                iconCls:'unidad',
                hidden:joshua.hidden,
                items: [{
                    xtype:'comboTransportadora',
                    fieldLabel: 'Transportadora',
                    id: 'txt_trasnportadora_filtro',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                },
                {
                    xtype:'comboEstados',
                    fieldLabel: 'Destino',
                    id: 'txt_cdestino_filtro',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                },
                {
                    fieldLabel: 'Fecha inicio',
                    xtype:'datefield',
                    format:'Y-m-d',
                    id: 'txt_trans_fecha_inicio',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                },{
                    fieldLabel: 'Fecha fin',
                    xtype:'datefield',
                    format:'Y-m-d',
                    id: 'txt_trans_fecha_fin',
                    listeners: {
                        scope: this,
                        select: this.filtro
                    }
                }
                ]
            }]
        };
    },

    filtro: function (){

        var tipo_servicio=Ext.getCmp('txt_filtro_tservicio').getValue();
        var txt_filtro_estatus=Ext.getCmp('txt_filtro_estatusd').getRawValue();
        var comboSucDestinoFiltro=Ext.getCmp('comboSucDestinoFiltro').getValue();
        var txt_fecha_inicio_filtro=Ext.getCmp('txt_fecha_inicio_filtro').getRawValue();
        var txt_fecha_fin_filtro=Ext.getCmp('txt_fecha_fin_filtro').getRawValue();

        var txt_destinatario_filtro=Ext.getCmp('txt_destinatario_filtro').getRawValue();
        var txt_remitente_filtro=Ext.getCmp('txt_remitente_filtro').getRawValue();

        var txt_cdestino_filtro=Ext.getCmp('txt_cdestino_filtro').getValue();
        var txt_trans_fecha_inicio=Ext.getCmp('txt_trans_fecha_inicio').getValue();
        var txt_trasnportadora_filtro=Ext.getCmp('txt_trasnportadora_filtro').getRawValue();
        var txt_trans_fecha_fin=Ext.getCmp('txt_trans_fecha_fin').getRawValue();

        //	alert(txt_filtro_estatus);
        if (tipo_servicio != '' || txt_filtro_estatus != '' || comboSucDestinoFiltro != '' || txt_fecha_inicio_filtro != '' || txt_fecha_fin_filtro != '' ||
            txt_destinatario_filtro != '' ||
            txt_remitente_filtro != '' ||
            txt_trans_fecha_inicio != '' ||
            txt_trasnportadora_filtro != '' ||
            txt_cdestino_filtro!= '' ||
            txt_trans_fecha_fin != '') {
            var params = new Object();

            if (tipo_servicio != '')
                params.tipo_servicio = tipo_servicio;

            if (txt_filtro_estatus != '')
                params.txt_filtro_estatus = txt_filtro_estatus;

            if (comboSucDestinoFiltro != '')
                params.comboSucDestinoFiltro = comboSucDestinoFiltro;



            if (txt_destinatario_filtro != '')
                params.destinatario = txt_destinatario_filtro;

            if (txt_remitente_filtro != '')
                params.remitente = txt_remitente_filtro;

            if (txt_fecha_inicio_filtro != '')
                params.txt_fecha_inicio_filtro = txt_fecha_inicio_filtro;

            if (txt_fecha_fin_filtro != '')
                params.txt_fecha_fin_filtro = txt_fecha_fin_filtro;

            if (txt_trans_fecha_inicio != '')
                params.txt_trans_fecha_inicio = txt_trans_fecha_inicio;

            if (txt_trasnportadora_filtro != '')
                params.txt_trasnportadora_filtro = txt_trasnportadora_filtro;

            if (txt_trans_fecha_fin != '')
                params.txt_trans_fecha_fin = txt_trans_fecha_fin;

            if (txt_cdestino_filtro != '')
                params.cdestino = txt_cdestino_filtro;

            this.grid.listar(Ext.util.JSON.encode(params));
        }
        else
            this.grid.listar("{}");
    },

    limpiarFiltro: function (){
        Ext.getCmp('txt_filtro_tservicio').reset();
        Ext.getCmp('txt_filtro_estatusd').reset();
        Ext.getCmp('comboSucDestinoFiltro').reset();
        Ext.getCmp('txt_fecha_inicio_filtro').reset();
        Ext.getCmp('txt_fecha_fin_filtro').reset();

        Ext.getCmp('txt_trans_fecha_inicio').reset();
        Ext.getCmp('txt_trasnportadora_filtro').reset();
        Ext.getCmp('txt_trans_fecha_fin').reset();
        Ext.getCmp('txt_destinatario_filtro').reset();
        Ext.getCmp('txt_remitente_filtro').reset();

        this.grid.listar("{}");
    },

    filtroId : function(){
        var txtId = Ext.getCmp('id_filtro_guia').getValue();
        if (txtId != "") {
            this.grid.listar('{"txtId":"' + txtId + '"}');
            Ext.getCmp('id_filtro_guia').setValue('');
        }
    }

});
